package com.xxx.yuedong.course.service.impl;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xxx.yuedong.common.exception.YuedongException;
import com.xxx.yuedong.common.pojo.PageData;
import com.xxx.yuedong.course.controller.form.AddCourseForm;
import com.xxx.yuedong.course.controller.form.UpdateCourseForm;
import com.xxx.yuedong.course.db.dao.CoursesDao;
import com.xxx.yuedong.course.service.CoursesService;
import com.xxx.yuedong.course.pojo.Course;
import com.xxx.yuedong.mall.model.pojo.Product;
import com.xxx.yuedong.utils.PageInfoToPageDataConverterUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpStatus;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Arrays;
import java.util.List;

/**
 * 课程模块业务层
 *
 * @Author YinXi
 * @Versin 1.0.0
 * @Date 2023/8/11
 */
@Service
@Slf4j
public class CoursesServiceImpl implements CoursesService {
    @Autowired
    private CoursesDao coursesDao;
    @Value("${yuedong.course.default-query-page-size}")
    private Integer defaultQueryPageSize;

    /**
     * 新增课程
     */
    @Override
    public Course addCourse(AddCourseForm form) {
        Course course = new Course();
        BeanUtils.copyProperties(form,course,"tags");
        course.setTags("[\""+form.getTags()+"\"]");
        int num = coursesDao.insertCourse(course);
        if(num<=0){
            log.error("【MySQL数据库异常无法新增数据】");
            throw new YuedongException(HttpStatus.SC_BAD_REQUEST,"MySQL数据库异常无法新增数据");
        }
        Long id = course.getId();
        if(id == null){
            log.error("【获取刚刚插入的数据的id失败】");
            throw new YuedongException(HttpStatus.SC_NO_CONTENT,"获取刚刚插入的数据的id失败");
        }
        course = coursesDao.selectCourseById(id);
        return course;
    }

    /**
     *批量删除课程
     * -判断批量传入的课程是不是空或者是null
     * -判断有没有已经被删除的课程
     */
    @Override
    public void deleteCourses(Long[] ids) {
//        判断批量传入的课程是不是空或者是null
        if(ids.length==0 || ids == null){
            log.error("【传入的课程是空或者是null】");
            throw new YuedongException(HttpStatus.SC_BAD_REQUEST,"未选中课程id或者是上传了一个空的课程id");
        }
        int num = coursesDao.deleteCoursesByIds(ids);
//        判断有没有已经被删除的课程
        if(num<ids.length){
            log.warn("【有已经被删除的课程】");
            throw new YuedongException(HttpStatus.SC_NO_CONTENT,"课程已经被删除");
        }
    }

    /**
     * 更新课程的相关信息
     * -判断是否存在该id的课程信息
     */
    @Override
    public Course updateCourse(UpdateCourseForm form) {
//        判断是否存在该id的课程信息
        if(coursesDao.selectCourseById(form.getId())==null){
            log.error("【未查询到对应的课程信息】");
            throw new YuedongException(HttpStatus.SC_NO_CONTENT,"课程信息已经被删除或者不存在了");
        }
        form.setTags("[\""+form.getTags()+"\"]");
        int num = coursesDao.updateCourseById(form);
        if(num<=0){
            log.error("【MySQL出现错误，请检查MySQL服务器】");
            throw new YuedongException(HttpStatus.SC_NOT_FOUND,"服务器繁忙，请稍后再试");
        }
        Course course = coursesDao.selectCourseById(form.getId());
        return course;
    }

    /**
     * 分页查询获取文章列表
     */
    @Override
    public PageData<Course> list(Integer pageNum) {
        PageData<Course> pageData = listPage(pageNum,defaultQueryPageSize);
        return pageData;
    }

    /**
     * 分页查询文章列表
     */
    @Override
    public PageData<Course> listPage(Integer pageNum, Integer pageSize) {
        PageHelper.startPage(pageNum, pageSize);
        List<Course> list = coursesDao.list();
        PageInfo<Course> pageInfo = new PageInfo<>(list);
        PageData<Course> pageData = PageInfoToPageDataConverterUtil.convert(pageInfo);
        return pageData;
    }

    /**
     * 根据课程的id获取课程的信息
     */
    @Override
    public Course getCourse(Long id) {
        return coursesDao.selectCourseById(id);
    }

    /**
     * 根据课程名称搜索课程
     */
    @Override
    public PageInfo searchListByName(Integer pageNum, Integer pageSize, String name) {
        PageHelper.startPage(pageNum, pageSize);
        List<Course> courses = coursesDao.selectList(name);
        PageInfo pageInfo = new PageInfo(courses);
        return pageInfo;
    }

    @Override
    public List<Course> getListOfCourse() {
        return coursesDao.list();
    }

}
